package xml;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

import java.util.Vector;

public class Coleccion extends Item {
    private Vector<Item> items;

    public Coleccion( String name ) {
        super( name );
        items = new Vector<Item>();
    }
    
    public void addItem( Item item )
    {
        this.items.add( item );
    }
    
    public void addNodo( String name, String value )
    {
        this.addItem( new Nodo( name, value ) );
    }
    
    public Item getItem( int index )
    {
        if( items.size() == 0 || index < 0 || index >= items.size()  )
            return null;
        
        return items.get( index );
    }
    
    // intenta traer el item y castearlo a colleccion, si no puede devuelve null
    public Coleccion getColeccion( int index )
    {
        Item item = getItem( index );
        
        if( item == null || !item.isColeccion() )
            return null;
        
        return (Coleccion)item;
    }
    
    // intenta traer el item y castearlo a colleccion, si no puede 
    // o el nombre es distinto devuelve null
    public Coleccion getColeccion( int index, String name )
    {
        Item item = getItem( index );
        
        if( item == null || !item.isColeccion() || item.getName() != name )
            return null;
        
        return (Coleccion)item;
    }
    
    // intenta traer el item y castearlo a nodo, si no puede devuelve null
    public Nodo getNodo( int index )
    {
        Item item = getItem( index );
        
        if( item == null || !item.isNodo() )
            return null;
        
        return (Nodo)item;
    }
    
    // intenta traer el item y castearlo a nodo, si no puede o el
    // nombre es distinto devuelve null
    public Nodo getNodo( int index, String name )
    {
        Item item = getItem( index );
        
        if( item == null || !item.isNodo() || item.getName() != name )
            return null;
        
        return (Nodo)item;
    }
    
    public int size()
    {
        return items.size();
    }
    
    public Node toXml( Document doc )
    {
        try
        {
            Node root = doc.createElement(getName());
            
            for( int i = 0 ; i < items.size() ; i++ )
            {
                root.appendChild( items.get( i ).toXml( doc ) );
            }
      
            return root;
        }
        catch (Exception ex)
        {
            System.err.println(ex.getClass());
            System.err.println(ex.getMessage());
            ex.printStackTrace();
            return null;
        }
    }
}
